﻿package org.cshoo.common.data.dao;

import java.util.List;
import org.cshoo.common.data.idao.IBaseDAO;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.hibernate.criterion.DetachedCriteria;

/**
 * @author 杨翼 
 * 此类是用hibernate的方式实现了IBseDAO的，
 * 如果需要扩展其他持久层框架，可以借鉴这个类的写法
 */
public class BaseDAO implements IBaseDAO {

	private HibernateTemplate hibernateTemplate;

	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}

	@Override
	public Object addObject(Object object) {
		hibernateTemplate.save(object);
		return object;
	}

	@Override
	public Object getObject(Class c, Long id) {
		return hibernateTemplate.get(c, id);
	}

	@Override
	public List<Object> findObjectListByExample(Object objectExample) {
		return hibernateTemplate.findByExample(objectExample);
	}
	
	@Override
	public Integer getObjectCountByExample(Object objectExample)
	{
		return hibernateTemplate.findByExample(objectExample).size();
	}

	/**
	 * 根据查询条件查询集合，这里采用hibernate方式
	 * @param criteria 查询条件
	 * @return
	 */
	protected List<Object> findObjectListByCriteria(DetachedCriteria criteria) {
		return hibernateTemplate.findByCriteria(criteria);
	}

	@Override
	public List<Object> findObjectBatcheListByExample(Object objectExample,
			int firstResult, int maxResults) {
		return hibernateTemplate.findByExample(objectExample, firstResult,
				maxResults);
	}

	/**
	 * 根据查询条件分批查询
	 * @param criteria 查询条件
	 * @param firstResult 起始记录数
	 * @param maxResults 最大记录个数
	 * @return 从数据库中取出来的对象实例集合
	 */
	protected List<Object> findObjectBatcheListByCriteria(DetachedCriteria criteria,
			int firstResult, int maxResults) {
		return hibernateTemplate.findByCriteria(criteria,
				firstResult, maxResults);
	}

	@Override
	public void updateObject(Object object) {
		hibernateTemplate.update(object);
	}

	@Override
	public void deleteObject(Object object) {
		hibernateTemplate.delete(object);
	}

	@Override
	public void addOrUpdateAllObjectList(List<Object> objectList) {
		hibernateTemplate.saveOrUpdateAll(objectList);
	}

	@Override
	public void deleteAllObjectList(List<Object> objectList) {
		hibernateTemplate.deleteAll(objectList);
	}

}
